home *** CD-ROM | disk | FTP | other *** search
/ Aminet 3 / Aminet 3 - July 1994.iso / Aminet / util / batch / ScriptTools.lha / ScriptTools / src / Basename.mod < prev    next >
Encoding:
Text File  |  1993-12-24  |  2.1 KB  |  97 lines

  1. (*
  2. ** -------------------------------------------------------------------------
  3. ** Program:  Basename
  4. ** Author:   Keith R. Burby
  5. ** Version:  0.4
  6. ** Date:     23.12.93
  7. ** Description:
  8. ** AmigaDOS 2.0/3.0 replacement for the ARP Shell's "Basename" command.
  9. ** Extract base filename from complete path and optionally delete suffix.
  10. ** -------------------------------------------------------------------------
  11. *)
  12.  
  13. (*
  14.   History:
  15.  
  16.   v0.4 (23.12.93)
  17.   Optimised the code some.
  18.   Took out extra online help.
  19.  
  20.   v0.3 (22.12.93)
  21.   Added extra online help.
  22.  
  23.   v0.2 (10.12.93)
  24.   Can now retreive the filename from pathnames longer than 255 characters.
  25.  
  26.   v0.1 (7.12.93)
  27.   Checks version of dos.library and exits if not 36 or greater.
  28.   Suffix checking is now case insensitive.
  29.  
  30.   v0.0 (6.12.93)
  31.   First Edition
  32. *)
  33.  
  34.  
  35. MODULE Basename;
  36.  
  37.   IMPORT
  38.     (* NoGuru, *)
  39.     d := Dos,
  40.     s := Strings,
  41.     u := Utility,
  42.     SYS := SYSTEM;
  43.  
  44.   CONST
  45.     DosLibVer = 36;
  46.     PrgName = "Basename\o"
  47.               "$VER: Basename 0.4 (23.12.93) Keith R. Burby";
  48.     ArgTemplate = "NAME/A,SUFFIX";
  49.  
  50.   TYPE
  51.     ArgArray = STRUCT (dummy: d.ArgsStruct)
  52.       Name, Suffix: d.ArgString;
  53.     END;
  54.  
  55.   VAR
  56.     ErrNum: LONGINT;
  57.  
  58.  
  59.   PROCEDURE GetBasename(): LONGINT;
  60.  
  61.     VAR
  62.       bName, cName: d.ArgString;
  63.       MyArgs: ArgArray;
  64.       MyRDArgs: d.RDArgsPtr;
  65.  
  66.     BEGIN
  67.       MyRDArgs := d.ReadArgs(ArgTemplate, MyArgs, NIL);
  68.       IF (MyRDArgs # NIL) THEN
  69.         bName := d.FilePart(MyArgs.Name^);
  70.         IF (MyArgs.Suffix # NIL) THEN
  71.           cName := SYS.ADR(bName[s.Length(bName^) - s.Length(MyArgs.Suffix^)]);
  72.           IF(u.Stricmp(cName^, MyArgs.Suffix^) = 0) THEN
  73.             cName[0] := "\o";
  74.           END;
  75.         END;
  76.         d.PrintF("%s\n", bName);
  77.         d.FreeArgs(MyRDArgs);
  78.       END;
  79.       RETURN(d.IoErr());
  80.     END GetBasename;
  81.  
  82.  
  83.   BEGIN
  84.     IF (d.dos.lib.version >= DosLibVer) THEN
  85.       ErrNum := GetBasename();
  86.       IF (ErrNum # 0) THEN
  87.         IF (d.PrintFault(ErrNum, PrgName)) THEN
  88.           HALT(10);
  89.         ELSE
  90.           HALT(20);
  91.         END;
  92.       END;
  93.     ELSE
  94.       HALT(DosLibVer);
  95.     END;
  96.   END Basename.
  97.